package com.leetcode;

import java.util.HashMap;
import java.util.Map;

/**
 * 2347. 最好的扑克手牌 (简单)
 * 给你一个整数数组ranks和一个字符数组suit。你有5张扑克牌，第i张牌大小为ranks[i]，花色为suits[i]。
 * 下述是从好到坏你可能持有的 手牌类型：
 * "Flush"：同花，五张相同花色的扑克牌。
 * "Three of a Kind"：三条，有 3 张大小相同的扑克牌。
 * "Pair"：对子，两张大小一样的扑克牌。
 * "High Card"：高牌，五张大小互不相同的扑克牌。
 * 请你返回一个字符串，表示给定的 5 张牌中，你能组成的 最好手牌类型。
 * 注意：返回的字符串大小写需与题目描述相同。
 */
public class LeetCode2347 {

    public static void main(String[] arg0) {
        int[] ranks = new int[]{4, 3, 2, 1, 13};
        char[] suits = new char[]{'a', 'a', 'a', 'a', 'a'};
        System.out.println("5张牌能组成的最好手牌类型 = " + bestHand(ranks, suits));
    }

    public static String bestHand(int[] ranks, char[] suits) {
        String res = "";
        // 先比花色
        boolean isSameSuit = true;
        for (int i = 1; i < suits.length; i++) {
            if (suits[i] != suits[0]) {
                isSameSuit = false;
                break;
            }
        }

        if (isSameSuit) {
            res = "Flush";
            return res;
        }

        // 再比相同数字的牌数量
        int maxSameRank = 0;
        Map<Integer, Integer> counts = new HashMap<>();
        for (int i = 0; i < ranks.length; i++) {
            counts.put(ranks[i], counts.getOrDefault(ranks[i], 0) + 1);
        }
        for (Integer count : counts.values()) {
            maxSameRank = Math.max(maxSameRank, count);
        }
        if (maxSameRank >= 3) {
            res = "Three of a Kind";
        } else if (maxSameRank >= 2) {
            res = "Pair";
        } else if (maxSameRank >= 1) {
            res = "High Card";
        }
        return res;
    }


}
